/*
 * Copyright 2025 The Bazel Authors. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.google.idea.blaze.base.run;

import com.google.common.collect.ImmutableList;
import com.google.idea.blaze.base.scope.BlazeContext;
import com.google.idea.blaze.common.Label;
import com.google.idea.blaze.common.artifact.OutputArtifact;
import com.intellij.openapi.project.Project;
import java.nio.file.Path;
import java.util.List;

/** A per-project cache for apks downloaded from ObjFS. */
public interface RuntimeArtifactCache {
  static RuntimeArtifactCache getInstance(Project project) {
    return project.getService(RuntimeArtifactCache.class);
  }

  /**
   * The provided artifacts are mapped to the provided target and are stored in a nested directory
   * structure in the cache, similar to `blaze-bin`. The provided artifacts are all from the same
   * build.
   */
  ImmutableList<Path> fetchArtifacts(
      Label target, List<? extends OutputArtifact> artifacts, BlazeContext context, RuntimeArtifactKind artifactKind);
}
